package org.linlinjava.litemall.core.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;

import java.util.List;
import java.util.Map;

/**
 * @author huangfei
 * @create 2022-01-24 19:03
 */
public class ExportUtils {

    /**
     *
     * @param workbook 工作簿
     * @param headers headers表示excel表中第一行的表头
     * @param sheetName sheet名称
     * @param dataMapList 表格数据
     * @param lastRowSetBold 最后一行是否加粗
     */
    public static void dealHSSFWorkbook(HSSFWorkbook workbook, String[] headers, String sheetName, List<Map<Integer,String>> dataMapList, boolean lastRowSetBold){
        HSSFSheet sheet = workbook.createSheet(sheetName);

        //新增数据行，并且设置单元格数据
        int rowNum = 1;

        HSSFRow row = sheet.createRow(0);
        //在excel表中添加表头

        //修改列宽
//        sheet.setColumnWidth(1,1000*10);
//        sheet.setColumnWidth(2,1000*10);
        sheet.setDefaultColumnWidth(17);
        // 定义单元格格式，添加单元格表样式，并添加到工作簿
        HSSFCellStyle headerCellStyle =getHeaderStyle(workbook);
        // 定义单元格格式，添加单元格表样式，并添加到工作簿
        HSSFCellStyle normalCellStyle =getNormalTextStyle(workbook);

        for(int i=0;i<headers.length;i++){
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            cell.setCellValue(text);
            cell.setCellStyle(headerCellStyle);
        }

        //在表中存放查询到的数据放入对应的列
        for ( int i = 0; i < dataMapList.size(); i++) {
            Map<Integer,String> columnMap=dataMapList.get(i);
            HSSFRow row1 = sheet.createRow(rowNum);
            final int rowNumber=i;
            columnMap.forEach((k,v)->{
                if (columnMap.get(k)!=null) {
                    HSSFCell cell =row1.createCell(k);
                    cell.setCellValue(v);
                    if (lastRowSetBold
                            && rowNumber==dataMapList.size()-1){//最后一行加粗
                        cell.setCellStyle(headerCellStyle);
                    }else {
                        cell.setCellStyle(normalCellStyle);
                    }
                }
            });
            rowNum++;
        }
    }

    public static HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook){
        // 定义单元格格式，添加单元格表样式，并添加到工作簿
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        // 设置单元格水平对齐类型
        cellStyle.setAlignment(HorizontalAlignment.CENTER); // 指定单元格居中对齐
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 指定单元格垂直居中对齐
        cellStyle.setWrapText(true);// 指定单元格自动换行
        // 设置单元格字体
        HSSFFont font = workbook.createFont();
        font.setBold(true);
        font.setFontName("微软雅黑");//字体
        font.setFontHeightInPoints((short)10);//设置字体
        cellStyle.setFont(font);
        return cellStyle;
    }

    public static HSSFCellStyle getNormalTextStyle(HSSFWorkbook workbook){
        // 定义单元格格式，添加单元格表样式，并添加到工作簿
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        // 设置单元格水平对齐类型
        cellStyle.setAlignment(HorizontalAlignment.CENTER); // 指定单元格居中对齐
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 指定单元格垂直居中对齐
        cellStyle.setWrapText(true);// 指定单元格自动换行
//        // 设置单元格字体
        HSSFFont font = workbook.createFont();
        font.setBold(true);
        font.setFontName("微软雅黑");//字体
        font.setFontHeightInPoints((short)10);//设置字体
        cellStyle.setFont(font);
        return cellStyle;
    }

}
